"""
创建新的类或实例属性

问题:
    你想创建一个新的拥有一些额外功能的实例属性类型，比如类型检查。
解决方案：
    如果你想创建一个全新的实例属性，可以通过一个描述器类的形式来定义它的功能。
"""

from numbers import Integral


class Integer:
    def __init__(self, name):
        self.name = name

    def __get__(self, instance, owner):
        if instance is None:
            return self
        else:
            return instance.__dict__[self.name]

    def __set__(self, instance, value):
        if not isinstance(value, Integral):
            raise Exception("Expected an int")
        instance.__dict__[self.name] = value

    def __delete__(self, instance):
        del instance.__dict__[self.name]


class User:
    uid = Integer("uid")

    def __init__(self, uid):
        self.uid = uid

    def __str__(self):
        return str(self.uid)


def use_user():
    user = User(10001)
    print(user)
    # 输出结果：
    """
    10001
    """


if __name__ == '__main__':
    use_user()
